/**
 *
 */
package SQLDAL;

import Control.CConfig;
import DALFactory.IDALStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

/**
 * SQL层实现Statement接口的类
 *
 * @author kocio
 */
public class SQLStatement implements IDALStatement {

    private String SQLDB_DRIVER;
    private String SQLDB_URL;
    private String SQLDB_USERNAME;
    private String SQLDB_PASSWD;
    private CConfig config;

    /**
     *
     */
    public SQLStatement() {
/*
        config = CConfig.getConfig();
        SQLDB_DRIVER = config.getProperties().get("SQLDB_DRIVER").toString();
        SQLDB_URL = config.getProperties().get("SQLDB_URL").toString();
        SQLDB_USERNAME = config.getProperties().get("SQLDB_USERNAME").toString();
        SQLDB_PASSWD = config.getProperties().get("SQLDB_PASSWD").toString();
*/
    	
    	  SQLDB_DRIVER = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
          SQLDB_URL = "jdbc:sqlserver://localhost:1433;DatabaseName=RH";
          SQLDB_USERNAME ="RHAdmin";
          SQLDB_PASSWD ="RHAdmin";
    }

    /**
     * JDBC建立数据库连接
     *
     * @return 返回Connection连接对象
     */
    public SQLConnection openSQLConnection() {

        SQLConnection sc = new SQLConnection();
        sc.openConnection(SQLDB_DRIVER, SQLDB_URL, SQLDB_USERNAME, SQLDB_PASSWD);
        return sc;
    }

    /**
     * 关闭数据库连接
     */
    public void closeSQLConnection(SQLConnection sc) {
        sc.closeConnection();
    }

    /**
     * Perform 执行给定的 SQL 语句，该语句返回单个 ResultSet 对象。
     *
     * @param sql 要发送给数据库的 SQL 语句，通常为静态 SQL SELECT 语句
     * @return 返回包含给定查询所生成数据的 ResultSet 对象，永远不能为 null
     */
    public ResultSet executeQuery(SQLConnection sc, String sql) {
        Connection conn = sc.getConnection();
        ResultSet rs = null;
        try {
            Statement stmt = conn.createStatement();    //发送SQL语句
            rs = stmt.executeQuery(sql);    //执行SQL语句
            System.out.println("执行SQL语句成功！");
        } catch (SQLException ex) {
            System.out.println("执行SQL语句失败！");
            ex.printStackTrace();
        }
        return rs;
    }

    /**
     * Perform 执行给定 SQL 语句，该语句可能为 INSERT、UPDATE 或 DELETE 语句，或者不返回任何内容的 SQL 语句（如
     * SQL DDL 语句）。
     *
     * @param sql SQL 数据操作语言（Data Manipulation Language，DML）语句，如 INSERT、UPDATE 或
     * DELETE；或者不返回任何内容的 SQL 语句，如 DDL 语句。
     */
    public boolean executeUpdate(SQLConnection sc, String sql) {
        try {
            Connection conn = sc.getConnection();
            Statement stmt = conn.createStatement();    //发送SQL语句
            stmt.executeUpdate(sql);    //执行SQL语句
            System.out.println("执行SQL语句成功！");
            return true;
        } catch (SQLException ex) {
            System.out.println("执行SQL语句失败！");
            ex.printStackTrace();
            return false;
        }
    }
}